package com.lu.proxy;

import com.lu.proxy.interfaces.ClothFactory;
import com.lu.proxy.interfaces.Human;
import com.lu.proxy.myfactory.ProxyFactory;
import com.lu.proxy.toproxy.NickClothaFactory;
import com.lu.proxy.toproxy.SuperMan;

/**
 * @Date:2021/11/8/22:12
 * @Description:动态代理类测试
 *
 * 想要实现动态代理，需要解决的问题？
 * 问题一：如何格局根据加载到内存中的被代理类，动态的创建一个代理类及被代理类的对象。
 * 问题二：当通过代理类的对象调用方法时，如何动态的去调用被代理类中的同名方法。
 *
 *
 */
public class ProxyTest {
    public static void main(String[] args) {

        //被代理的对象
        SuperMan superMan = new SuperMan();

        //动态代理类的对象
        Human proxyInstance = (Human) ProxyFactory.getProxyInstance(superMan);


        String belief = proxyInstance.getBelief();
        System.out.println("belief = " + belief);

        System.out.println("\t");

        //被代理对象
        NickClothaFactory nickClothaFactory = new NickClothaFactory();

        //动态代理类的对象
        ClothFactory proxyInstance1 = (ClothFactory) ProxyFactory.getProxyInstance(nickClothaFactory);

        proxyInstance1.produceCloth();


    }


}
